package com.lwl.exceptionhandler;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author Lei
 * @create 2022-10-16 14:14
 */

//由spring容器来管理，并将其标记为一个异常处理组件，这里标记完之后，也需要在配置文件中扫描该注解所在的包
@ControllerAdvice
public class ExceptionMethod {

//    这里需要标明需要对什么样的异常进行处理，这里使用的案例是UserController里面的getAllUserData方法
    @ExceptionHandler(NullPointerException.class)
    @ResponseBody
    public ResultMessage errorTest(Exception exception){
//        返回的结果必须是LayData类型的JSON数据，所以在下面定义了一个Result类，还需要在上面标明@ResponseBody
//        在这里将异常的信息进行返回，如果打印全部的异常信息，那么就是用Result，如果只打印部分信息，这里可以使用ResultMessage
//        这里返回的结果类型是不同的,
//        return new Result(exception);
        return new ResultMessage(exception.getMessage());
    }
}


@Data
@AllArgsConstructor
@NoArgsConstructor
class Result{
    private Integer code = 1;
    private String msg = "失败";
    private Exception exception;

    public Result(Exception exception) {
        this.exception = exception;
    }
}

@Data
@AllArgsConstructor
@NoArgsConstructor
class ResultMessage{
    private Integer code = 1;
    private String msg = "访问失败，请先登录";
    private String  exceptionmsg;

    public ResultMessage(String exceptionmsg) {
        this.exceptionmsg = exceptionmsg;
    }
}